昨天介紹 data pipeline 的管理工具,今天讓我們邁入下一步,先來介紹資料版本要如何控管,接著介紹在建立機器學習模型時,要如何有效率地進行實驗追蹤和視覺化吧。
DVC(Data Version Control)是一個開源的版本控制系統,專門用於管理和追蹤機器學習專案中的數據和模型。簡單來說,DVC 就是 data 版本的 Git,將版本控制的概念引入機器學系專案中,讓我們可以更有效率地追蹤和共享每一個版本的資料集和模型。
接下來介紹 DVC 的基本使用方法。
安裝 DVC:pip install dvc
在 Git 目錄中初始化DVC
dvc init
git commit -m "Initialize DVC"
dvc add data.csv
git add data.csv.dvc .gitignore
git commit -m "Add data.csv to DVC"
dvc add data.csv 指定會讓 DVC 將文件的資訊儲存在 .dvc 檔案中,並且原本的 data.csv 移到 cache。
dvc remote add -d myremote s3://mybucket/dvcstore
git commit .dvc/config -m "Configure remote storage"
dvc push
DVC 也可以用來建立 data pipelines,建立方法可以使用 dvc stage add 來建立每個 stage 的內容,也可以建立一個 dvc.yaml 來定義 data pipeline。
dvc stage add以下是一個示範的指令。
dvc stage add -n prepare \
-p prepare.seed,prepare.split \
-d src/prepare.py -d data/data.xml \
-o data/prepared \
python src/prepare.py data/data.xml
以上定義這個 stage 的幾個資訊:
-n prepare:使用 -n 來為這個 stage 命名,如 prepare 是該 stage 的名稱。
-p prepare.seed,prepare.split:-p 用來指定這個 stage 中會使用到的參數,參數數值會在 params.yaml 中被指定的參數,讓 DVC 可以追蹤這些參數的變化,並確保每次運行都可以重現結果。
-d src/prepare.py -d data/data.xml:-d 代表 dependencies(依賴),DVC 會追蹤這些 dependencies 的變化,若任一個 dependencies 改變,DVC 會重新運行這個 stage。此處有兩個 dependencies:
-o data/prepared:-o 代表 output(輸出),指定輸出的目錄或文件,此處是 data/prepared。
DVC 會追蹤這個輸出目錄中的內容,並將其作為該 stage 的結果。如果輸出文件發生變化,DVC 會更新相關版本。
python src/prepare.py data/data.xml:這是實際執行的命令。DVC 會執行 src/prepare.py,並使用 data/data.xml 作為輸入文件。
整體來說,這個 stage 會執行 src/prepare.py,用以處理輸入數據(data/data.xml),並生成處理後的數據文件到 data/prepared 目錄。
使用 dvc stage add 的話,會自動生成 dvc.yaml,也可以直接編輯 dvc.yaml 來定義 data pipeline:
stages:
prepare:
cmd: python src/prepare.py data/data.xml
deps:
- src/prepare.py
- data/data.xml
params:
- prepare.seed
- prepare.split
outs:
- data/prepared
featurize:
cmd: python src/featurization.py data/prepared data/features
deps:
- src/featurization.py
- data/prepared
params:
- featurize.max_features
- featurize.ngrams
outs:
- data/features
train:
cmd: python src/train.py data/features model.pkl
deps:
- src/train.py
- data/features
params:
- train.seed
- train.n_est
- train.min_split
outs:
- model.pkl
以上的程式碼中,我們定義了三個 stages:prepare、featurize 和 train,接著,可以使用 dvc repro 來執行 pipeline,也可以使用 dvc dag 來查看 pipeline 的 DAG,如以下所示:
+---------+
| prepare |
+---------+
*
*
*
+-----------+
| featurize |
+-----------+
*
*
*
+-------+
| train |
+-------+
以上是 DVC 管理資料版本和建立 data pipeline 的方式。
不過 DVC 的功能還不只這樣哦,接下來讓我們看一下他要怎麼追蹤實驗跟管理模型。
如果想要用 DVC 管理實驗數據,需要先使用 pip install dvclive 來安裝 DVCLive。
使用的方式非常簡單,假設你使用 hugging face 的話,只要在如以下示範增加幾行程式碼,即可開始追蹤數據。他也支援 Pytorch、Keras 或是單純使用 Python 呼叫。
from dvclive import Live
from dvclive.huggingface import DVCLiveCallback
...
with Live() as live:
trainer.add_callback(
DVCLiveCallback(live=live)
)
trainer.train()
trainer.save_model("mymodel")
live.log_artifact("mymodel", type="model")
每次執行程式碼都會創建一個 DVC 實驗,DVCLive 會自動記錄一些來自機器學習框架的 metrics、parameters 和圖表,以及由 DVC 追蹤的任何數據。我們也可以自行定義要繼續哪些其他資訊,如以下所示:
live.log_artifact("model.pt", type="model", name="gpt")
live.log_image("image.png", img)
live.log_metric("acc", 0.9)
live.log_params(params)
live.log_plot( "iris", datapoints, x="importance", y="name", template="bar_horizontal", title="Iris Feature Importance" )
live.log_sklearn_plot("roc", y_true, y_score)
接著,我們可以使用 DVCLive 的 report 來追蹤這些數據。
有三個以下方法:

如果在上述內容中,使用 live.log_artifact(),DVC 會將模型加入 model registry。如此一來,便可以透過 DVC 追蹤和管理模型。
若我們執行以下程式碼:
from dvclive import Live
with Live() as live:
...
live.log_artifact(
str("models/model.pkl"),
type="model",
name="pool-segmentation",
desc="This is a Computer Vision (CV) model that's segmenting out swimming pools from satellite images.",
labels=["cv", "segmentation", "satellite-images", params.train.arch],
)
便可以在 DVC Studio 的 Models 頁面,看到名為 pool-segmentation 的模型,以及他的描述。

我們可以方便地用 UI 進行模型的版本設定。

也可以設定模型的部署環境,並且會自動觸發 CI/CD,將模型部署到指定的環境。

我們在本篇文章中大致介紹了 DVC 的功能,他有非常強大的版本控制和實驗管理能力,讓我們可以更好地協作、追蹤實驗、管理資料集,並確保結果的可重現性。
如果我們不需要建立複雜的 data pipelines,也可以考慮先從 DVC 開始,輕量又好上手!
謝謝讀到最後的你,如果喜歡這系列,別忘了按下喜歡和訂閱,才不會錯過最新更新。
如果有任何問題想跟我聊聊,或是想看我分享的其他內容,也歡迎到我的 Instagram(@data.scientist.min) 逛逛!
我們明天見!
Reference:
[1] https://dvc.org/doc/start
[2] https://dvc.org/doc/start/experiments/experiment-tracking?tab=DVCLive-Report